// PROGRAMA : IDCPB003(PROGRAMA BATCH)  14/03/2002
// BIBLIOTECA : SISP
// OBJETIVO : GERAR ARQUIVO PARA AMERICAN BANK NOTE COMPANY - ABN
// : USER = STI
// : PASSWORD = IDENT2211
// : IP = 172.16.200.3
// : INCLUIR CAMPOS: DINIDE-DESPRO E DINIDE-NUMRES NO
// ARQUIVO GERADO PARA ABN EM 04/12/2002
// JCL : IDCTRANS (DISPARADO PELO SUPORTE MIRANDA)
// CARGA INICIAL 25/03/2002

package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileWriter;
import java.io.IOException;

import org.apache.commons.lang3.StringUtils;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.model.DidCadastro;
import br.com.vti.sisp_sicrim.antigo.model.SicRg;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Idcpb003 OBJETIVO : GERAR ARQUIVO PARA AMERICAN BANK NOTE COMPANY - ABN *
 * 
 * @author Incode - Data: mai/2014
 * 
 */

@Resource
@Path("/antigo/idcpb003")
public class Idcpb003 {
	// Views utilizadas
	SicTabelas vwTabele = new SicTabelas();
	SicTabelas vwDvetab = new SicTabelas();
	DidCadastro vwDidcad = new DidCadastro();
	SicRg vwsicrg = new SicRg();
	// Telas/relatorios utilizados
	// Includes utilizados
	// Areas globais / session
	Sisgsisp sisgsisp; // Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	FileWriter arquivo1;

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	private long iRegger; // NUMERO DO RG

	private String iNomide; // NOME DO IDENTIFICADO

	private String iNompai; // NOME DO PAI

	private String iNommae; // NOME DA MAE

	private int iCodsex; // CODIGO DO SEXO

	private int iDatnas; // DATA DE NASCIMENTO

	private int iComuna; // CODIGO DO MUNICIPIO DE NASCIMENTO

	private String iUfnasc; // UF NASCIMENTO

	private String iNacion; // CODIGO DA NACIONALIDADE

	private String iNomcar; // NOME DO CARTORIO

	private String iZonaof; // ZONA/OFICIO

	private String iVcivil; // VARA CIVIL

	private String iNumcer; // NUMERO DA CERTIDAO

	private String iNumliv; // NUMERO DO LIVRO

	private String iNumfol; // NUMERO DA FOLHA DO LIVRO

	private int iNumpor; // NUMERO DA PORTARIA MINISTERIAL

	private int iAnopor; // ANO DA PORTARIA MINISTERIAL

	private int iTipdoc; // TIPO DE DOCUMENTO

	private int iCodpor; // PAIS DE ORIGEM

	private int iDatnat; // DATA DE NATURALIZACAO

	private String iEndere; // ENDERECO

	private String iComple; // COMPLEMENTO

	private String iBairro; // BAIRRO

	private int iComuen; // CODIGO DO MUNICIPIO REFERENTE AO ENDERECO

	private String iUfmure; // UF DO MUNICIPIO REFERENTE AO ENDERECO

	private int iCodcep; // CEP DO MUNICIPIO REFERENTE AO ENDERECO

	private int iCodcut; // CUTIS

	private int iCorolh; // COR DOS OLHOS

	private int iCorcab; // COR DOS CABELOS

	private int iTipcab; // TIPO DE CABELOS

	private int iEstciv; // ESTADO CIVIL

	private int iDoador; // DOADOR DE ORGAOS(NAO USADO)

	private int iCodpro; // CODIGO DA PROFISSAO

	private long iNumcpf;
	private String iNumacpf;
	private String iRenaid; // NUMERO DO RENAID(CONTROLE DE PAGAMENTO DO RG)

	private long iPispas; // PIS/PASEP

	private int iAltura; // ALTURA

	private long iRegant; // MUMERO DE RG ANTERIOR

	private String iUfrant; // UF DO RG ANTERIOR

	private String iNomant; // MOME ANTERIOR

	private int iNumpos; // NUMERO DO POSTO

	private int iMatfun; // MATRICULA DO FUNCIONARIO

	private int iNumvia; // NUMERO DA VIA DE EMISSAO

	private int iDatdoc; // DATA DE EMISSAO DO RG

	private int iGrauin; // GRAU DE INSTRUCAO

	private int iTipopp; // PIS/OU/PASSEP

	private String iNumres; // NUMERO DA RESIDENCIA

	private String iDespro;
	private String regAbn; // FIM

	public Idcpb003(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void main() throws IOException {
		arquivo1 = new FileWriter("arquivo1");

		while (vwsicrg.leituraNumeroRg()) {
			// READADA
			if (vwsicrg.getFlag().trim().equals("")) {

				vwDidcad.consultaNumeroRg(vwsicrg.getNumeroRg());

				if (!vwDidcad.getRenaid().trim().equals("")) {
					mover();
					arquivo1.write(regAbn);
					while (vwsicrg.consultaNumeroRg(vwDidcad.getNumeroRg())) {
						// 223

						vwsicrg.exclui();
						// dao.commit();
					}
					vwsicrg.fecha();
				} else {
					// dao.rollback();
				}

				vwDidcad.fecha();
				if (vwDidcad.registrosProcessados() == 0) {
					UtilBean.mensagemTexto("#ERRO: REGISTRO NAO ENCONTRADO NO DID-CADASTRO");
				}

			}

		}
		vwsicrg.fecha();
		if (vwsicrg.registrosProcessados() == 0) {
			UtilBean.mensagemTexto("#ERRO: REGISTRO NAO ENCONTRADO NO SIC-RG");
		}

		regAbn = "";
		regAbn = StringUtils.repeat("9", 200) + StringUtils.repeat("9", 200);
		StringUtils.repeat("9", 183);
		arquivo1.write(regAbn);
		arquivo1.close();
	}

	private void mover() {

		iNumpos = vwDidcad.getNumeroPosto();
		iRegger = vwDidcad.getNumeroRg();
		iDatnas = vwDidcad.getDataNasc();
		iNumcpf = vwDidcad.getNumeroCpf();
		iMatfun = vwDidcad.getMatriculaFunc();
		iNomide = vwDidcad.getNomeIdent();
		iNommae = vwDidcad.getNomeMae();
		iNumvia = vwDidcad.getNumeroVia();
		iRegant = vwDidcad.getRegistroAnterior();
		iUfrant = vwDidcad.getUfRegAnterior();
		iEstciv = vwDidcad.getEstadoCivil();
		iNacion = String.valueOf(vwDidcad.getNacionalidadeIdent());
		iComuna = vwDidcad.getNomeMunicipioIdent();
		iUfnasc = vwDidcad.getUfMunicipioNasc();
		iCodsex = vwDidcad.getCodigoSexo();
		iPispas = vwDidcad.getNumeroPisPasep();
		iTipdoc = vwDidcad.getTipoDocumento();
		iCodcep = vwDidcad.getCodigoCep();
		iComuen = vwDidcad.getCodigoMunicipio();
		iUfmure = vwDidcad.getUfMunicipio();
		iCodpro = vwDidcad.getCodigoProfissao();
		iCodcut = vwDidcad.getCodigoCutis();
		iAltura = vwDidcad.getAlturaIdent();
		iCorolh = vwDidcad.getCodigoCorOlhos();
		iCorcab = vwDidcad.getCodigoCorCabelo();
		iTipcab = vwDidcad.getCodigoTipoCabelo();
		iDatdoc = vwDidcad.getDataDocumento();
		iNumres = vwDidcad.getNumeroResidencia();
		iZonaof = vwDidcad.getZonaOficio();
		iVcivil = vwDidcad.getVaraCivil();
		iNumliv = vwDidcad.getNumeroLivro();
		iNumfol = vwDidcad.getNumeroFolha();
		iNumcer = vwDidcad.getNumeroCertidao();
		iNomcar = vwDidcad.getNomeCartorio();
		iComple = vwDidcad.getComplementoEndereco();
		iBairro = vwDidcad.getNomeBairro();
		iEndere = vwDidcad.getEnderecoIdent();
		iNomant = vwDidcad.getNomeAnterior();
		iNompai = vwDidcad.getNomePai();
		iNumpor = vwDidcad.getNumeroPortariaMinist();
		iAnopor = vwDidcad.getAnoPortariaMinist();
		iCodpor = vwDidcad.getPaisOrigem();
		iDatnat = vwDidcad.getDataNaturalizacao();
		iGrauin = vwDidcad.getGrauin();
		iTipopp = vwDidcad.getTipopp();
		iRenaid = vwDidcad.getRenaid();
		iDespro = vwDidcad.getDespro();
		switch (vwDidcad.getTipoDocumento()) {
		case 1: {
			iNumcer = vwDidcad.getNumeroCertidao();
			iNumfol = vwDidcad.getNumeroFolha();
			iNumliv = vwDidcad.getNumeroLivro();
			break;
		}
		case 2: {
			iNumcer = vwDidcad.getNumeroCertidao();
			iNumfol = vwDidcad.getNumeroFolha();
			iNumliv = vwDidcad.getNumeroLivro();
			break;
		}
		case 3: {
			iNumpor = vwDidcad.getNumeroPortariaMinist();
			iAnopor = vwDidcad.getAnoPortariaMinist();
			break;
		}
		case 4: {
			iNumpor = vwDidcad.getNumeroPortariaMinist();
			iAnopor = vwDidcad.getAnoPortariaMinist();
			break;
		}
		case 5: {
			iNumcer = vwDidcad.getNumeroCertidao();
			iNumfol = vwDidcad.getNumeroFolha();
			iNumliv = vwDidcad.getNumeroLivro();
			break;
		}
		case 6: {
			iNumcer = vwDidcad.getNumeroCertidao();
			iNumfol = vwDidcad.getNumeroFolha();
			iNumliv = vwDidcad.getNumeroLivro();
			break;
		}
		default: {
			break;
		}
		}
		iDatnas = vwDidcad.getDataNasc();
		if (vwDidcad.getRegistroAnterior() > 0 && vwDidcad.getUfRegAnterior() == sessao.getSisgsisp().getUfloca()) {
			iRegant = vwDidcad.getRegistroAnterior();
		} else {
			if (vwDidcad.getNumeroPisPasep() > 0) {
				iPispas = vwDidcad.getNumeroPisPasep();
			} else {
				iRegant = 0;
				iPispas = 0;
			}

		}

		if (vwDidcad.getNumeroCpf() > 0) {
			iNumcpf = vwDidcad.getNumeroCpf();
		} else {
			iNumacpf = StringUtils.repeat("*", 11);
		}

		if (iNumacpf.equals("0")) {
			iNumacpf = StringUtils.repeat("*", 11);
		}

		iNumvia = vwDidcad.getNumeroVia();

		regAbn = UtilBean.moveSubstring(regAbn, 0, 13, "N", iRegger);
		regAbn = UtilBean.moveSubstring(regAbn, 13, 60, "A", iNomide);
		regAbn = UtilBean.moveSubstring(regAbn, 73, 60, "A", iNompai);
		regAbn = UtilBean.moveSubstring(regAbn, 133, 60, "A", iNommae);
		regAbn = UtilBean.moveSubstring(regAbn, 193, 1, "N", iCodsex);
		regAbn = UtilBean.moveSubstring(regAbn, 194, 8, "N", iDatnas);
		regAbn = UtilBean.moveSubstring(regAbn, 202, 4, "N", iComuna);
		regAbn = UtilBean.moveSubstring(regAbn, 206, 2, "A", iUfnasc);
		regAbn = UtilBean.moveSubstring(regAbn, 208, 2, "A", iNacion);
		regAbn = UtilBean.moveSubstring(regAbn, 210, 20, "A", iNomcar);
		regAbn = UtilBean.moveSubstring(regAbn, 230, 6, "A", iZonaof);
		regAbn = UtilBean.moveSubstring(regAbn, 236, 6, "A", iVcivil);
		regAbn = UtilBean.moveSubstring(regAbn, 242, 9, "A", iNumcer);
		regAbn = UtilBean.moveSubstring(regAbn, 251, 8, "A", iNumliv);
		regAbn = UtilBean.moveSubstring(regAbn, 259, 6, "A", iNumfol);
		regAbn = UtilBean.moveSubstring(regAbn, 265, 5, "N", iNumpor);
		regAbn = UtilBean.moveSubstring(regAbn, 270, 4, "N", iAnopor);
		regAbn = UtilBean.moveSubstring(regAbn, 274, 1, "N", iTipdoc);
		regAbn = UtilBean.moveSubstring(regAbn, 275, 4, "N", iCodpor);
		regAbn = UtilBean.moveSubstring(regAbn, 279, 8, "N", iDatnat);
		regAbn = UtilBean.moveSubstring(regAbn, 287, 30, "A", iEndere);
		regAbn = UtilBean.moveSubstring(regAbn, 317, 20, "A", iComple);
		regAbn = UtilBean.moveSubstring(regAbn, 337, 20, "A", iBairro);
		regAbn = UtilBean.moveSubstring(regAbn, 357, 4, "N", iComuen);
		regAbn = UtilBean.moveSubstring(regAbn, 361, 2, "A", iUfmure);
		regAbn = UtilBean.moveSubstring(regAbn, 363, 8, "N", iCodcep);
		regAbn = UtilBean.moveSubstring(regAbn, 371, 1, "N", iCodcut);
		regAbn = UtilBean.moveSubstring(regAbn, 372, 1, "N", iCorolh);
		regAbn = UtilBean.moveSubstring(regAbn, 373, 1, "N", iCorcab);
		regAbn = UtilBean.moveSubstring(regAbn, 374, 1, "N", iTipcab);
		regAbn = UtilBean.moveSubstring(regAbn, 375, 1, "N", iEstciv);
		regAbn = UtilBean.moveSubstring(regAbn, 376, 1, "N", iDoador);
		regAbn = UtilBean.moveSubstring(regAbn, 377, 6, "N", iCodpro);
		regAbn = UtilBean.moveSubstring(regAbn, 383, 11, "N", iNumcpf);
		regAbn = UtilBean.moveSubstring(regAbn, 394, 12, "A", iRenaid);
		regAbn = UtilBean.moveSubstring(regAbn, 406, 11, "N", iPispas);
		regAbn = UtilBean.moveSubstring(regAbn, 417, 3, "N", iAltura);
		regAbn = UtilBean.moveSubstring(regAbn, 420, 13, "N", iRegant);
		regAbn = UtilBean.moveSubstring(regAbn, 433, 2, "A", iUfrant);
		regAbn = UtilBean.moveSubstring(regAbn, 435, 60, "A", iNomant);
		regAbn = UtilBean.moveSubstring(regAbn, 495, 3, "N", iNumpos);
		regAbn = UtilBean.moveSubstring(regAbn, 498, 7, "N", iMatfun);
		regAbn = UtilBean.moveSubstring(regAbn, 505, 2, "N", iNumvia);
		regAbn = UtilBean.moveSubstring(regAbn, 507, 8, "N", iDatdoc);
		regAbn = UtilBean.moveSubstring(regAbn, 515, 2, "N", iGrauin);
		regAbn = UtilBean.moveSubstring(regAbn, 517, 1, "N", iTipopp);
		regAbn = UtilBean.moveSubstring(regAbn, 518, 5, "A", iNumres);
		regAbn = UtilBean.moveSubstring(regAbn, 523, 60, "A", iDespro);
	}

	private void trataErro(Exception e) {
		// if (erro.getCodigoErro() == 3145) {
		// Retry
		// } else {
		UtilBean.mensagemTexto("!--------------------------------------------------------------!");
		UtilBean.mensagemTexto("!  SISP - SISTEMA DE INFORMACOES DE SEGURANCA PUBLICA:         !");
		UtilBean.mensagemTexto("!  TRANSACAO CANCELADA,  ENTRAR EM CONTATO COM A UGT,          !");
		UtilBean.mensagemTexto("!                                                              !");
		UtilBean.mensagemTexto("!  ANALISTA SOLON MIRANDA,  TEL: 9974-8432 / 218-2253 R-2253   !");
		UtilBean.mensagemTexto("!                                                              !");
		UtilBean.mensagemTexto("!  INFORME OU LEIA A LINHA ABAIXO:                             !");
		UtilBean.mensagemTexto("!  ERROR NUMERO:" + e.getCause() + "    LINHA:" + e.getStackTrace() + " PROGRAMA:IDCPB003 !");
		UtilBean.mensagemTexto("!--------------------------------------------------------------!");
		// }

	}
}
